fn main() {
    #[allow(clippy::inconsistent_digit_grouping)]
    {
        let _small_number: u8 = 10;
        // 10u8 = 10 of type u8.
        let _small_number = 10u8;
        // This is easier to read.
        let _small_number = 10_u8;
        // 100 million is easy to read with _.
        let _big_number = 100_000_000_i32;
        // The _ does not change the number. It is only to make it easy for you
        // to read. And it doesn't matter how many _ you use.
        let number1 = 0________u8;
        let number2 = 1___6______2____4______i32;
        println!("{}, {}", number1, number2);
    }
    {
        // Rust sees . and knows that it is a float.
        let _my_float = 5.;
        // This is an f64.
        let my_float: f64 = 5.0;
        // This is an f32.
        let my_other_float: f32 = 8.5;
        // my_other_float as f64 = use my_other_float like an f64.
        let _third_float = my_float + my_other_float as f64;
    }
    {
        // Rust will choose f64.
        let my_float = 5.0;
        // Here again it will choose f64.
        let my_other_float = 8.5;
        let _third_float = my_float + my_other_float;
    }
    {
        let my_float: f32 = 5.0;
        // Usually Rust would choose f64.
        let my_other_float = 8.5;
        // But now it knows that you need to add it to an f32. So it chooses f32 for
        // my_other_float too.
        let _third_float = my_float + my_other_float;
    }
}
